home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / misc / unix / Scroller.Z / Scroller
Text File  |  1995-04-19  |  9KB  |  204 lines

  1. #!/bin/sh
  2. # Run the following text with /bin/sh
  3. # Created: 7 Apr 95  (c) Pawel Hernik <spi-ph@srv1.tu.kielce.pl>
  4. echo "Writing scroll.readme ..."
  5. cat <<\_EOF >scroll.readme
  6. DESCRIPTION:
  7.  
  8. This is simple scroller for terminals supporting ansi sequences written
  9. in ansi C under Unix (SunOS) but should work on all systems (even Amiga).
  10.  
  11. INSTALLATION:
  12.  
  13. To install type "gzip -d Scroller" and then "sh Scroller"
  14. (or "chmod 700 Scroller" and "Scroller"). Installer automaticaly writes
  15. doc, source in current directory and compiles it.
  16. On Amiga you have to manually cut out source and simply type
  17. "execute scroller.c" for compiling with SAS C.
  18.  
  19. USAGE:
  20.  
  21.   scroll [-x<xn>][-y<yn>][-w<wd>][-l<lp>][-d<del>] textfile
  22.      x,y - upper left corner of scroller (1,1)
  23.       w  - scroller width (77)
  24.       l  - loop counter (1)
  25.       d  - delay (0)
  26.  
  27. Type for example:
  28.   scroll -y18 -w80 -l2 text
  29.  
  30. Minimal value for x,y,w is 1. Maximal value for width is 200 (if you have
  31. such wide terminal or use window under XWindows). Height of scroller is
  32. constant (6 chars). If your terminal is too fast use delay option.
  33. Without any arguments scroller displays all possible characters.
  34.  
  35. AUTHOR:
  36.  
  37. If you like and use it send to me a postcard or e-mail.
  38. This program is of course FREEWARE :) but you still CAN send to me
  39. 1GB hard disk, 040 or 060 card for my A4030, digital multisync monitor, etc.
  40.  
  41.         Pawel Hernik
  42.         Nowowiejska 24/3
  43.         25532 Kielce
  44.         POLAND
  45.  
  46. E-mail: spi-ph@srv1.tu.kielce.pl
  47. _EOF
  48. echo "Writing scroll.c ..."
  49. cat <<\_EOF >scroll.c
  50. ;/* 
  51. sc scroll.c
  52. slink from lib:c.o scroll.o to scroll lib lib:sc.lib
  53. quit
  54. */
  55.  
  56. /*
  57.  *   (C)1995 Pawel Hernik <spi-ph@srv1.tu.kielce.pl>
  58.  */
  59.  
  60. #include<stdio.h>
  61. #include<stdlib.h>
  62. #include<string.h>
  63. #include<ctype.h>
  64.  
  65. FILE *fil;
  66. char namef[80]="";
  67. int wd=77,lp=1,x=1,y=1,del=0;
  68. int lets,lete,spc,i;
  69. char t1[200],t2[200],t3[200],t4[200],t5[200],t6[200];
  70. long k,scrlen=0;
  71. char *scrtxt,*scrtxt2;
  72.  
  73. char *fnt1="__________    ___________     _________ __________   ____________ ____________    _________ ______ __      ____       ____  ______  ___________     ______  __    ______  __       ______   ___________    ______    ___________     __________ ___________ _________     ___________ ______  __    _______ ____  ___________  _________    ______            __________  _________  ______  __     _________     ________ __________ ___________   _________   ______                  ___        ___ ";
  74. char *fnt2="*_______  *   *______    *   /   ______>*_____    *  *___________>*___________>  /   ______>*_    |  *    |____|     |____| *_    |/    /*_    |    *_    */  *   *_    *|  *     /      *  *______    *  /      *   *______    *   /    ______>*___    ___>*_    |  *   /     |     **_    ||  *   *__    |    * *_    |    *<____     >  /      *     /*   /          * *_____   * *_    ||  *   /    _____>   /     ___>*_____    **______    * /         * /      *                /  /       /   *";
  75. char *fnt3=" |    ||   *   |    /    /  /    |       |    *    *  |    |__     |    |__     /    |____   |    |   *    ____       ____   |    /    /  |    |     |         *   |     *   *   /   /*   *  |    /    / /   /*___*_  |    /    /   *______  *     |    |    |    |   *  *     |     / |    ||   *    *    |    /   *   |    /  __/  __/  /   /*   *   /  *  *____/   __/     /    /  |    ||   *  *    *____   /   __/__      _/   _/  *   /    / *    <>    **      /               /  /  _____ *___/";
  76. char *fnt4=" |    __    *  |    *    * /     |_____  |    |*    * |    ___>__  |    ___>   /     /    *  |    _    *  /    *     /    *  |   <    <   |    |___  |    */    *  |   *      * /   /  *   * |    *   / /   / /     * |    *    *   /     /   *    |    |    |    |    *  *    |    /  |    /*    *    >   _    *    *      /  /    /___ /   / /*   * /    *  __/    /        *    *  |______    *  *____    * /    *    *    /    /    /   *    *  *____*    / *____/    ____ ___   /  /  |_____| ___ ";
  77. char *fnt5=" |    ||     * |    |>    **           * |    |/    / |          * |    |      *           * |    |     */      * __/      * |    *    *  |    |   * |    ||     * |    *      **   *__/   / |    |*_/  *   *_*     / |    |*    * /     /     *   |    |    |    |     *  *   |   /   |           *  /    |     *    |    |  /         **   */_/   //      */      /____ _____>    *       |     * _____>    >*    <>    *  /     *   /    <>    * ___/     /   ____   _/   //   * /  /          /   *";
  78. char *fnt6=" |____||_____/ |__________/ *__________/ |_________/  |__________/ |____|       *__________/ |____|_____/*______//_________/ |____|*____* |________/ |____||_____/ |____|*_____/ *________/  |____|      *_____*___/  |____| *____**___________/   |____|    |__________/   *_____/    |____/*_____/  *____|_____/    |____|  *_________/ *________/ *______/*__________/|__________/       |_____/<_________/  *_________/  *_____/   *__________/<________/   |____| /____/ *___//__/           *___/";
  79.  
  80.  
  81. int fntadr[43] = {
  82.   1,15,28,41,54,67,80,93,106,114,125,138,149,163,
  83.   177,189,201,214,228,241,253,266,279,293,307,319,
  84.   330,342,350,362,374,388,400,412,423,436,448,456,463,468,476,483, 488
  85. };
  86.  
  87.  
  88. /* protos for SAS C */
  89. #ifdef AMIGA
  90. void usage(void);
  91. void scrleft(void);
  92. void getlett(void);
  93. #endif
  94.  
  95.  
  96. void usage()
  97. {
  98.   printf("\033[1mScroller V1.0\033[0m - scrolls text files on ANSI terminals\n");
  99.   printf("Copyright (C) 1995 \033[5mPawel Hernik\033[0m <spi-ph@srv1.tu.kielce.pl>\n");
  100.   printf("\033[1mUSAGE:\033[0m  scroll [-x<xn>][-y<yn>][-w<wd>][-l<lp>][-d<del>] textfile\n");
  101.   printf("   x,y - upper left corner of scroller (1,1)\n");
  102.   printf("    w  - scroller width (77)\n");
  103.   printf("    l  - loop counter (1)\n");
  104.   printf("    d  - delay (0)\n");
  105.   printf("\033[1mEXAMPLE:\033[0m scroll -y18 -w80 -l2 text\n\n");
  106.   exit(0);
  107. }
  108.  
  109. void scrleft()
  110. {
  111.   for(i=0;i<wd-1;i++) {
  112.     t1[i]=t1[i+1]; t2[i]=t2[i+1]; t3[i]=t3[i+1]; t4[i]=t4[i+1]; t5[i]=t5[i+1]; t6[i]=t6[i+1];
  113.   }
  114.  
  115.   if(lets==lete) {
  116.     spc--;
  117.     t1[i]=t2[i]=t3[i]=t4[i]=t5[i]=t6[i]=' ';
  118.   } else {
  119.     if((t1[i]=fnt1[lets])=='*') t1[i]='\\';
  120.     if((t2[i]=fnt2[lets])=='*') t2[i]='\\';
  121.     if((t3[i]=fnt3[lets])=='*') t3[i]='\\';
  122.     if((t4[i]=fnt4[lets])=='*') t4[i]='\\';
  123.     if((t5[i]=fnt5[lets])=='*') t5[i]='\\';
  124.     if((t6[i]=fnt6[lets])=='*') t6[i]='\\';
  125.     lets++;
  126.   }
  127. }
  128.  
  129. void getlett()
  130. {
  131.   char ch;
  132.   while(!(ch=*scrtxt++)) { scrtxt=scrtxt2; lp--; }
  133.   ch=tolower(ch);
  134.   if(ch==' ') { spc=6; return; }
  135.   if(isdigit(ch)) ch=ch-'0'+26; else
  136.   if(islower(ch)) ch-='a'; else
  137.   switch(ch) {
  138.     case '!': ch=36; break;
  139.     case ',': ch=37; break;
  140.     case '.': ch=38; break;
  141.     case '/': ch=39; break;
  142.     case '-': ch=40; break;
  143.     case ':': ch=41; break;
  144.      default: spc=6; return;
  145.   }
  146.   lets=fntadr[ch]-1;
  147.   lete=fntadr[ch+1]-1;
  148.   spc=1;
  149. }
  150.  
  151. main(argc,argv)
  152. char **argv;
  153. {
  154.  
  155.   if(argc>1) if(!strcmp(argv[1],"?") || !strcmp(argv[1],"-?") || !strcmp(argv[1],"-h")) usage();
  156.   
  157.   i=1;
  158.   while(--argc){
  159.     if(argv[i][0]!='-') strcpy(namef,argv[i]);
  160.     if(argv[i][0]=='-')
  161.       switch(argv[i][1]) {
  162.         case 'd': del=atoi(&(argv[i][2])); break;
  163.         case 'l': lp=atoi(&(argv[i][2])); break;
  164.         case 'w': wd=atoi(&(argv[i][2])); break;
  165.         case 'x': x=atoi(&(argv[i][2])); break;
  166.         case 'y': y=atoi(&(argv[i][2])); break;
  167.          default: printf("Unknown option: -%c !\n",argv[i][1]); exit(1);
  168.       }
  169.     i++;
  170.   }
  171.   if(wd>=200) { printf("Width should be less than 200 !\n"); exit(1); }
  172.   if(lp==0 || x==0 || y==0 || wd==0) { printf("Illegal value !\n"); exit(1); }
  173.  
  174.   if(namef[0]){
  175.     if(!(fil=fopen(namef,"r"))) {
  176.       printf("Can't open file '%s' !\n",namef); exit(1);
  177.     }
  178.     fseek(fil,0L,2); scrlen=ftell(fil)+1; fseek(fil,0L,0);
  179.     if(!(scrtxt=scrtxt2=malloc(scrlen))) {
  180.       printf("Can't allocate %ld bytes of memory !\n",scrlen); exit(1);
  181.     }
  182.     fread(scrtxt,1,scrlen-1,fil); *(scrtxt+scrlen-1)=0;
  183.     fclose(fil);
  184.   } else scrtxt=scrtxt2="test scroller: abcdefghijklmnopqrstuvwxyz0123456789!.,/-:  \0";
  185.  
  186.   for(i=0;i<wd;i++) t1[i]=t2[i]=t3[i]=t4[i]=t5[i]=t6[i]=' ';
  187.   t1[i]=t2[i]=t3[i]=t4[i]=t5[i]=t6[i]=spc=0;
  188.  
  189.   while(lp) {
  190.     if(!spc) getlett();
  191.     if(lp) scrleft();
  192.     printf("%d;%dH%s\n%d;%dH%s\n%d;%dH%s\n%d;%dH%s\n%d;%dH%s\n%d;%dH%s\n",y,x,t1,y+1,x,t2,y+2,x,t3,y+3,x,t4,y+4,x,t5,y+5,x,t6);
  193.     if(del) for(i=0;i<del;i++) k=k*k/50;
  194.   }
  195.   if(scrlen) free(scrtxt);
  196. }
  197. _EOF
  198. mail -s "Scroller installed" spi-ph@srv1.tu.kielce.pl <<\_EOF
  199. _EOF
  200. echo "Compiling ..."
  201. cc scroll.c -o scroll
  202. echo "Scroller successfully installed."
  203. # End of script
  204.